
# 自定义后台
from django.conf import settings
from django.contrib.auth.backends import ModelBackend

import re


# 定义生成邮箱验证连接方式
def generate_reset_email_url(user):

#     加密数据
#   加密的是user_id 跟email
    data_dict = {'user_id': user.id, 'email':user.email}

#   进行加密数据
    from utils.secret import SecretOauth
    secret_data = SecretOauth().dumps(data_dict)

#   返回拼接url
    reset_url = settings.EMAIL_RESET_URL + secret_data
    return reset_url




# 封装校验账号的函数功能,里边可以添加其他账号qq 微博等
def get_user_by_account(account):


    # 里边可以添加其他账号qq 微博等  if - else if -else
    # "[a-zA-Z0-9_]{4,20}@(163|126|qq|sina|yahoo)\.com",
    try:
        #  邮箱格式的用户名,前端的验证正则也得改
        # if re.match(r'^[a-zA-Z0-9_]{4,20}@(163|126|qq|sina|yahoo)\.com', account):
        #     user = User.objects.get(email=account)
        if re.match('^1[3-9]\d{9}$', account):
#             手机号
            user = User.objects.get(mobile=account)
        else:
#             用户名
            user = User.objects.get(username=account)

    except User.DoesNotExist:
        return None
    else:
        return user


# 自定义认证后台实现多账号登录
class UsernameMobileAuthBackend(ModelBackend):

    # 重写父类的authenticate认证方法
    def authenticate(self, request, username=None, password=None, **kwargs):

        # 实现多账号登陆
        user = get_user_by_account(username)
        # 校验user是否存在并校验密码是否正确
        if user and user.check_password(password):
            return user